
package GUI;

import controladoresJPA.ConnectionFactory;
import controladoresJPA.SucursalJpaController;
import controladoresJPA.exceptions.NonexistentEntityException;
import controladoresJPA.exceptions.PreexistingEntityException;
import entregapersistencia.Sucursal;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;

/**
 * @author Hern&aacute;ndez Abahonza Diana Carolina 1031083
 * @author L&oacute;pez Juan Camilo
 * @author Moncada Mu&nacute;oz Juan David
 */
public class PanelSucursal extends JPanel implements ActionListener {
    
    private JLabel lSucursal;
    private ArrayList<JLabel> lDatosSucursal;
    private ArrayList<JTextField> tfDatosSucursal;
    private ArrayList<String> stDatosSucursal;
    private JButton bCrear;
    private JButton bModificar;
    private JButton bEliminar;
    private String nit;
    ConnectionFactory fabrica;
    SucursalJpaController controlador;
    Sucursal sucursal;
    
    public PanelSucursal(){
        this.setLayout(new BorderLayout(5,0));//ec, ef
	
	inicializarComponentes();
	organizarComponentes();
    }
    
    private void inicializarComponentes() {
        lSucursal = new JLabel("Gestión Sucursales" ,new ImageIcon("images/branches-48x48.png"),SwingConstants.LEFT);
	lSucursal.setFont(new Font("Arial", Font.BOLD, 18));
	lSucursal.setForeground(new Color(78,79,99,190));
                
        lDatosSucursal = new ArrayList<JLabel>();
        lDatosSucursal.add( new JLabel( "Código" ) );
        lDatosSucursal.add( new JLabel( "Ciudad" ) );
        lDatosSucursal.add( new JLabel( "Dirección" ) );
        lDatosSucursal.add( new JLabel( "Teléfono" ) );
        
        tfDatosSucursal = new ArrayList<JTextField>();
        stDatosSucursal = new ArrayList<String>();
        
        fabrica = new ConnectionFactory();
        controlador = new SucursalJpaController(fabrica.getFactory());
        sucursal = new Sucursal();
        nit = "716789520";
        
        for(int i=0; i<lDatosSucursal.size(); i++){
            lDatosSucursal.get(i).setFont(new Font("Arial", Font.BOLD, 14));
            lDatosSucursal.get(i).setForeground(new Color(78,79,99,190));
            
            tfDatosSucursal.add( new JTextField( "" ) );
	}
        
        bCrear = new JButton("Crear");
        configurarBoton(bCrear);
        
        bModificar = new JButton("Modificar");
        configurarBoton(bModificar);
        
        bEliminar = new JButton("Eliminar");
        configurarBoton(bEliminar);
    }
    
    private void configurarBoton(JButton boton){
        boton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
	boton.setRolloverEnabled(false); // Quita la iluminacion al pasar el mouse por el boton 
	//boton.setBorderPainted(false); // Quita el borde del boton
	boton.setBackground(new Color(0,0,0,0)); // Fondo Transparente
	boton.addActionListener(this); // Escucha del boton
    }

    private void organizarComponentes() {
        JPanel pTexto = new JPanel();
	pTexto.setBorder(BorderFactory.createEmptyBorder(180,110,15,110));//n,w,s,e
	pTexto.setBackground(new Color(0,0,0,0));
	pTexto.add(lSucursal);
		
	JPanel pFormulario = new JPanel(new GridLayout(lDatosSucursal.size(),2,0,0));//i,j,esp_i, esp_j
	pFormulario.setBorder(BorderFactory.createEmptyBorder(15,110,15,110));//n,w,s,e
	pFormulario.setBackground(new Color(0,0,0,0));
	for(int i=0; i<lDatosSucursal.size(); i++){
            pFormulario.add(lDatosSucursal.get(i));
            pFormulario.add(tfDatosSucursal.get(i));
	}
        
        JPanel pBotones = new JPanel(new GridLayout(1,3,5,0));
	pBotones.setBorder(BorderFactory.createEmptyBorder(15,110,180,110));//n,w,s,e
	pBotones.setBackground(new Color(0,0,0,0));
	pBotones.add(bCrear);
	pBotones.add(bModificar);
	pBotones.add(bEliminar);
		
	this.add(pTexto, BorderLayout.NORTH);
	this.add(pFormulario, BorderLayout.CENTER);
	this.add(pBotones, BorderLayout.SOUTH);
    }
    
    private void capturarDatos(){
        stDatosSucursal.clear();
        stDatosSucursal.add(tfDatosSucursal.get(0).getText());
        stDatosSucursal.add(tfDatosSucursal.get(1).getText());
        stDatosSucursal.add(tfDatosSucursal.get(2).getText());
        stDatosSucursal.add(tfDatosSucursal.get(3).getText());
    }

    private String crearSucursal() {
        String resultado = "";
        capturarDatos();

        sucursal.setId(stDatosSucursal.get(0));
        sucursal.setCiudad(stDatosSucursal.get(1));
        sucursal.setDireccion(stDatosSucursal.get(2));
        sucursal.setNit(nit);
        sucursal.setTelefono(stDatosSucursal.get(3));
        
        try {
            controlador.create(sucursal);
            resultado = "Sucursal Ingresada en el Catalogo";
        } catch (PreexistingEntityException ex) {
            Logger.getLogger(PanelSucursal.class.getName()).log(Level.SEVERE, null, ex);
            resultado = "Sucursal Ya Existente";
        } catch (Exception ex) {
            Logger.getLogger(PanelSucursal.class.getName()).log(Level.SEVERE, null, ex);
            resultado = "Sucursal no guardada en el catalogo";
        }
        System.out.println("Resultado: "+resultado);
        return resultado;
    }

    private void modificarSucursal() {
        
        capturarDatos();
        
        sucursal.setId(stDatosSucursal.get(0));
        sucursal.setCiudad(stDatosSucursal.get(1));
        sucursal.setDireccion(stDatosSucursal.get(2));
        sucursal.setTelefono(stDatosSucursal.get(3));
        sucursal.setNit(nit);
        
        try{
            controlador.edit(sucursal);
            JOptionPane.showMessageDialog(this, "Sucursal modificada correctamente");
        }catch(Exception e){
            JOptionPane.showMessageDialog(this, "Sucursal no existente");
        }
    }
    
    private String eliminarSucursal() {
        String resultado="";
        capturarDatos();
        
        try {
            controlador.destroy(stDatosSucursal.get(0));
            resultado = "Sucursal eliminada correctamente";
        } catch (NonexistentEntityException ex) {
            resultado = "La Sucursal no existe";
        }
        return resultado;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==bCrear){
            JOptionPane.showMessageDialog(this, crearSucursal());
	}
		
	if(e.getSource()==bModificar){
            modificarSucursal();
        }
        
	if(e.getSource()==bEliminar){
            JOptionPane.showMessageDialog(this, eliminarSucursal());
	}
    }
}

